package com.jic.member.controller.manage;

import com.alibaba.fastjson.JSONObject;
import com.jic.common.base.vo.RestResult;
import com.jic.member.constant.consist.ResponseCode;
import com.jic.member.entity.TSmsTouchSettings;
import com.jic.member.request.TSmsTouchSettingsListRequest;
import com.jic.member.request.TSmsTouchSettingsRequest;
import com.jic.member.response.TSmsTouchSettingsResponse;
import com.jic.member.service.TSmsTouchSettingsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: 建投数据科技(山东)有限公司
 * @date: 2020-06-04 15:47:06
 */
@RestController
@Slf4j
@RequestMapping("/tSmsTouchSettings")
@Api(tags = " [短信触达设置]控制类-PC")
public class TSmsTouchSettingsController {

  @Autowired
  private TSmsTouchSettingsService service;

  /**
   * 新增记录
   *
   * @param request 新增[短信触达设置]请求参数
   * @return TSmsTouchSettingsResponse 新增[短信触达设置]响应参数 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:04
   */
  @ApiOperation(value = "新增[短信触达设置]记录")
  @PostMapping("/save")
  @ResponseBody
  public RestResult<Long> save(@RequestBody TSmsTouchSettingsRequest request) throws Throwable {
    TSmsTouchSettings tSmsTouchSettings = new TSmsTouchSettings();
    BeanUtils.copyProperties(request, tSmsTouchSettings);
    long flag = service.save(tSmsTouchSettings);
    return RestResult.success(flag);
  }

  /**
   * 新增或修改记录
   *
   * @param request 新增或修改[短信触达设置]请求参数
   * @return TSmsTouchSettingsResponse 新增或修改[短信触达设置]响应参数 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:04
   */
  @ApiOperation(value = "保存或更新[短信触达设置]")
  @PostMapping("/saveOrUpdate")
  @ResponseBody
  public RestResult<Long> saveOrUpdate(@Validated @RequestBody TSmsTouchSettingsListRequest request) throws Throwable {
    request.getTSmsTouchSettingsRequests().forEach(item -> {
      TSmsTouchSettings tSmsTouchSettings = new TSmsTouchSettings();
      BeanUtils.copyProperties(item, tSmsTouchSettings);
      tSmsTouchSettings.setDeptId(request.getAdminOperate().getDeptId());
      tSmsTouchSettings.setDeptType(request.getAdminOperate().getDeptType().getCode());
      service.saveOrUpdate(tSmsTouchSettings);
    });
    return RestResult.success(1L);
  }

  /**
   * 删除记录
   *
   * @param request 删除[短信触达设置]请求参数
   * @return TSmsTouchSettingsResponse 删除[短信触达设置]响应参数 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:04
   */
  @ApiOperation(value = "删除[短信触达设置]记录")
  @PostMapping("/delete")
  @ResponseBody
  public RestResult<Long> delete(@RequestBody TSmsTouchSettingsRequest request) throws Throwable {
    TSmsTouchSettings tSmsTouchSettings = new TSmsTouchSettings();
    BeanUtils.copyProperties(request, tSmsTouchSettings);
    long flag = service.deleteByPrimaryKeyLogically(tSmsTouchSettings);
    return RestResult.success(flag);
  }

  /**
   * 修改记录
   *
   * @param request 修改[短信触达设置]请求参数
   * @return TSmsTouchSettingsResponse 修改[短信触达设置]响应参数 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:04
   */
  @ApiOperation(value = "修改[短信触达设置]记录")
  @PostMapping("/update")
  @ResponseBody
  public RestResult<Long> update(@RequestBody TSmsTouchSettingsRequest request) throws Throwable {
    TSmsTouchSettings tSmsTouchSettings = new TSmsTouchSettings();
    BeanUtils.copyProperties(request, tSmsTouchSettings);
    long flag = service.updateByPrimaryKeySelective(tSmsTouchSettings);
    return RestResult.success(flag);
  }

  /**
   * 单表查询详情信息
   *
   * @param request 查询[短信触达设置]详情请求参数
   * @return TSmsTouchSettingsResponse 查询[短信触达设置]详情响应参数 author 建投数据科技(山东)有限公司
   * @date 2020-3-11 20:54:04
   */
  @PostMapping("/getByPrimaryKey")
  @ApiOperation(value = "查询[短信触达设置]详情")
  @ResponseBody
  public RestResult<TSmsTouchSettingsResponse> getByPrimaryKey(@Validated @RequestBody TSmsTouchSettingsRequest request) {
    log.info("查询详情请求参数入参，{}", JSONObject.toJSONString(request));
    if (request != null && request.getId() != null) {

      TSmsTouchSettings tSmsTouchSettings = new TSmsTouchSettings();
      BeanUtils.copyProperties(request, tSmsTouchSettings);
      TSmsTouchSettings result = service.getByPrimaryKey(tSmsTouchSettings);
      log.info("查询详情请求参数出参，{}", JSONObject.toJSONString(result));
      if (result == null) {
        return RestResult.error(ResponseCode.EXCEPTION, "记录不存在");
      }
      TSmsTouchSettingsResponse bo = new TSmsTouchSettingsResponse();
      BeanUtils.copyProperties(result, bo);
      return RestResult.success(bo);
    }
    log.info("查询详情请求结束");
    return RestResult.success(new TSmsTouchSettingsResponse());
  }

  /**
   * T_SMS_TOUCH_SETTINGS 查询列表（不分页）
   *
   * @param request 前端请求参数
   */
  @PostMapping("/listAll")
  @ApiOperation(value = "不分页查询 [短信触达设置] ")
  @ResponseBody
  public RestResult<List<TSmsTouchSettingsResponse>> listTSmsTouchSettingsAllRecord(@RequestBody TSmsTouchSettingsRequest request) throws Throwable {
    TSmsTouchSettings param = new TSmsTouchSettings();
    BeanUtils.copyProperties(request, param);
    param.setDeleteFlag(0);
    List<TSmsTouchSettings> list = service.listAllRecord(param);
    List<TSmsTouchSettingsResponse> responseList = list.stream().map(temp -> {
      TSmsTouchSettingsResponse bo = new TSmsTouchSettingsResponse();
      BeanUtils.copyProperties(temp, bo);
      return bo;
    }).filter(item -> item != null).collect(Collectors.toList());
    return RestResult.success(responseList);
  }

}

